home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / cshell / hypdoc.c < prev    next >
C/C++ Source or Header  |  1994-03-10  |  3KB  |  121 lines

  1. #include <strings.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <exec/types.h>
  5.  
  6.  
  7. #define ASCII_DOC    "csh:csh.doc"
  8. #define HYPER_GUIDE    "csh:csh-tutorial.guide"
  9. #define HYPER_INDEX    "csh:csh-reference.guide"
  10.  
  11.  
  12. char indx[300][20];
  13.  
  14.  
  15. int main(int argc, char *argv[])
  16. {
  17.     char Line[256];
  18.     FILE *in,*out1,*out2;
  19.     int index_mode = 0;
  20.     int indx_i = 0;
  21.     int indx_w = 0;
  22.     char *p;
  23.  
  24.     if (!(in=fopen(ASCII_DOC,"r"))) {
  25.         exit(5);
  26.     }
  27.  
  28.     if (!(out1=fopen(HYPER_GUIDE,"w"))) {
  29.         fclose(in);
  30.         exit(5);
  31.     }
  32.  
  33.     if (!(out2=fopen(HYPER_INDEX,"w"))) {
  34.         fclose(in);
  35.         fclose(out1);
  36.         exit(5);
  37.     }
  38.  
  39.     fprintf(out2,    "@database csh-reference\n\n"
  40.             "##\n"
  41.             "## Use AmigaGuide to view this document.\n"
  42.             "##\n\n"
  43.             "@node main \"C-Shell documentation\"\n"
  44.             "@width 77\n\n"
  45.             "  C-SHELL 5.20+ REFERENCE,  Copyright 1991-1993 by the authors.\n\n"
  46.             "  @{\"   Commands    \" link Commands  }\n"
  47.             "  @{\"   Variables   \" link Variables }\n"
  48.             "  @{\"   Functions   \" link Functions }\n"
  49.             "\n@endnode\n\n"
  50.         );
  51.  
  52.     while (fgets(Line,255,in)) {
  53.         if (strcmp(Line,"LIST OF COMMANDS:\n")==0) {
  54.             index_mode = 1;
  55.             indx_i = indx_w = 0;
  56.             fgets(Line,255,in);
  57.         }
  58.         else if (strcmp(Line,"LIST OF VARIABLES:\n")==0) {
  59.             index_mode = 2;
  60.             indx_i = indx_w = 0;
  61.             fgets(Line,255,in);
  62.         }
  63.         else if (strcmp(Line,"LIST OF FUNCTIONS:\n")==0) {
  64.             index_mode = 3;
  65.             indx_i = indx_w = 0;
  66.             fgets(Line,255,in);
  67.         }
  68.  
  69.         else if (index_mode) {
  70.             if (Line[0]!=' ' && Line[0]!='\t' && Line[0]!='\n' && Line[0]!='\0') {
  71.                 char cmd_lower[80];
  72.                 int i;
  73.                 fprintf(out2,"@endnode\n\n");
  74.                 switch (index_mode) {
  75.                   case 1: fprintf(out2,"@node Commands\n\n"); break;
  76.                   case 2: fprintf(out2,"@node Variables\n\n"); break;
  77.                   case 3: fprintf(out2,"@node Functions\n\n"); break;
  78.                 }
  79.                 for (i=1; i<=indx_i; i++) {
  80.                     strcpy(cmd_lower,indx[i]);
  81.                     strlwr(cmd_lower);
  82.                     fprintf(out2,"  @{\"%-*.*s\" Link %-*.*s}",indx_w,indx_w,cmd_lower,indx_w,indx_w,indx[i]);
  83.                     /* AG-Window (topaz8, 640x200) is 76 chars wide */
  84.                     if (i% (76/(indx_w+3)) == 0 || i==indx_i)
  85.                         fprintf(out2,"\n");
  86.                 }
  87.                 fprintf(out2,"@endnode\n\n");
  88.                 fprintf(out1,"%s",Line);
  89.                 index_mode = 0;
  90.             }
  91.             else if (strncmp(Line,"    ",4)==0 && Line[4]!=' ' && Line[4]!='\0' && Line[4]!='\n') {
  92.                 int i;
  93.                 strncpy(indx[++indx_i],Line+4,19);
  94.                 indx[indx_i][20] = 0;
  95.                 if (p=strchr(indx[indx_i],'\n'))
  96.                     *p = 0;
  97.                 if (p=strchr(indx[indx_i],'('))
  98.                     *p = 0;
  99.                 if (indx_i>1)
  100.                     fprintf(out2,"@endnode\n");
  101.                 if ((i=strlen(indx[indx_i]))>indx_w)
  102.                     indx_w = i;
  103.                 fprintf(out2,"@node %s\n\n%s\n",indx[indx_i],Line);
  104.             }
  105.             else {
  106.                 fprintf(out2,"%s",Line);
  107.             }
  108.         }
  109.         else {
  110.             fprintf(out1,"%s",Line);
  111.         }
  112.     }
  113.  
  114.     fclose(in);
  115.     fclose(out1);
  116.     fclose(out2);
  117.  
  118.     exit(0);
  119. }
  120.  
  121.